/* eslint valid-jsdoc: "off" */

"use strict";

/**
 * @param {Egg.EggAppInfo} appInfo app info
 */
module.exports = appInfo => {
  /**
   * built-in config
   * @type {Egg.EggAppConfig}
   **/
  const config = (exports = {});

  // use for cookie sign key, should change to your own and keep security
  config.keys = appInfo.name + "_1625628944318_2171";

  // add your middleware config here
  config.middleware = ["adminReqLog"];

  // add your user config here
  const userConfig = {
    // myAppName: 'egg',
  };
  // 安全配置
  config.security = {
    csrf: {
      enable: false,
      ignoreJSON: true
    },
    domainWhiteList: ["*"]
  };

  // 跨域配置
  config.cors = {
    origin: "*",
    allowMethods: "GET,HEAD,PUT,POST,DELETE,PATCH"
  };
  // 访问数据库
  config.sequelize = {
    dialect: "mysql", // 数据库类型，支持 mysql，sqlite,mssql,pgsql,oracle。
    host: "114.96.85.40", // 数据库服务器地址。
    port: 3306, // 数据库连接端口号。
    database: "sy_pass", // 数据库名称。
    username: "root", // 数据库登录用户名。
    password: "123456", // 数据库登录密码。
    timezone: "+08:00", // 时区 东八区
    // 是否自动进行下划线转换（这里是因为DB默认的命名规则是下划线方式，而我们使用的大多数是驼峰方式）
    underscored: true,
    define: {
      freezeTableName: true, // Model 对应的表名将与model名相同。
      timestamps: false // 默认情况下，Sequelize会将createdAt和updatedAt的属性添加到模型中，以便您可以知道数据库条目何时进入数据库以及何时被更新。
      // createdAt: "createdTime",
      // updatedAt: "updatedTime"
    }
  };

  // swagger文档配置
  config.swaggerdoc = {
    dirScanner: "./app/controller", //插件扫描的文档路径
    apiInfo: {
      title: "HR文档", // 接口文档的标题。
      description: "egg.js swagger-demo文档", // 接口文档描述。
      version: "1.0.0" // 接口文档版本。
    },
    consumes: ["application/json", "multipart/form-data"], // 指定处理请求的提交内容类型（Content-Type），例如application/json, text/html
    produces: ["application/json", "multipart/form-data"], // 指定返回的内容类型，仅当request请求头中的(Accept)类型中包含该指定类型才返回
    schemes: ["http", "https"],
    routerMap: true, // 是否自动生成route
    enable: true
  };
  config.jwt = {
    secret: "bcrypt",
    expiresIn: 60 * 60 * 24 // 2小时过期
  };

  config.validatePlus = {
    resolveError(ctx, errors) {
      if (errors) {
        ctx.returnBody({
          code: 400,
          // error: errors,
          message: errors[0].message
        });
      }
    }
  };
  return {
    ...config,
    ...userConfig
  };
};
